#include <stdint.h>
#include "Drv_DAC.h"

// DAC最小/大输出电压
#define MIN_DAC_VOLTAGE	(0.0f)
#define MAX_DAC_VOLTAGE	(3.3f)
// DAC最小/大输出范围
#define MIN_DAC_VALUE	0
#define MAX_DAC_VALUE	4095
// VDDA参考电压
#define DAC_VREF_VOLTAGE (3.3f)
// 停止DAC
#define STOP_DAC_CONV	0
// 启动DAC
#define START_DAC_CONV	1


/**
***********************************************************
* @brief DAC初始化
* @param
* @return 
***********************************************************
*/
void DAC_AppInit(void)
{
	DAC_DrvInit();
	DAC_SetStatus(START_DAC_CONV);
}

/**
***********************************************************
* @brief 停止DAC输出
* @param
* @return 
***********************************************************
*/
void DAC_Stop(void)
{
	DAC_SetStatus(STOP_DAC_CONV);
}

/**
***********************************************************
* @brief 启动DAC输出
* @param
* @return 
***********************************************************
*/
void DAC_Start(void)
{
	DAC_SetStatus(START_DAC_CONV);
}

/**
***********************************************************
* @brief 设置DAC输出电压
* @param voltage: 电压值，范围0-3.3V
* @return 
***********************************************************
*/
void DAC_SetOutputVoltage(float voltage)
{
	if(voltage > MAX_DAC_VOLTAGE || voltage < MIN_DAC_VOLTAGE)
		return;
	
	uint32_t val = (uint32_t)(MAX_DAC_VALUE * voltage / DAC_VREF_VOLTAGE);
	DAC_SetValue(val);
}

/**
***********************************************************
* @brief 获取DAC输出的原始值
* @param 
* @return 返回DAC输出的数值，0-4095
***********************************************************
*/
uint32_t DAC_GetValue(void)
{
	return DAC_GetDigitalVal();
}

/**
***********************************************************
* @brief 获取DAC输出的电压值
* @param 
* @return 返回DAC输出的电压数值，0-3.3
***********************************************************
*/
float DAC_GetVoltage(void)
{
	return (float)(DAC_GetDigitalVal() * MAX_DAC_VOLTAGE / MAX_DAC_VALUE);
}
